package com.codegen.controller;

import com.codegen.entity.TableVo;
import com.codegen.service.TableService;
import com.codegen.utils.PageUtils;
import com.codegen.utils.Query;
import com.codegen.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping("/table")
@Validated
public class TableController {

    @Autowired
    private TableService tableService;

    /**
     * 新增
     *
     * @param table
     * @return
     */
    @PostMapping("/add")
    public R addTable(@Validated @RequestBody TableVo table) {
        int result = tableService.addTable(table);
        return result > 0 ? R.ok() : R.error("新增失败");
    }

    /**
     * 修改
     *
     * @param table
     * @return
     */
    @PostMapping("/edit")
    public R editTable(@Validated @RequestBody TableVo table) {
        int result = tableService.editTable(table);
        return result > 0 ? R.ok() : R.error("修改失败");
    }

    /**
     * 分页查询
     *
     * @param params
     * @return
     */
    @GetMapping("/page")
    public R getPage(@RequestParam Map<String, Object> params) {
        PageUtils pageUtil = tableService.queryList(new Query(params));
        return R.ok().put("data", pageUtil);
    }

    /**
     * 列出所有的表和字段，用于选择关联的表字段
     */
    @RequestMapping("/project-tables/{projectId}")
    public R tablesByProjectId(@PathVariable Integer projectId) {
        List<TableVo> tables = tableService.queryTablesByProjectId(projectId);
        return R.ok().put("tables", tables);
    }

    /**
     * 单个查询
     *
     * @param tableId
     * @return
     */
    @GetMapping("/info/{tableId}")
    public R getInfo(@PathVariable("tableId") Integer tableId) {
        TableVo tableVo = tableService.selectOneByTableId(tableId);
        return R.ok().put("data", tableVo);
    }
}
